#ifndef ESP_TASK_MANAGER_H
#define ESP_TASK_MANAGER_H

#include <mutex>
#include <list>
#include <queue>
#include <condition_variable>
#include <atomic>
#include <functional>
#include <memory>
#include <string>
#include <chrono>
#include <map>

#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/event_groups.h>
#include <freertos/semphr.h>

#include "esp_task_executor.h"

// 全局任务管理器
class TaskManager {
public:
    static TaskManager& GetInstance();
    
    // 禁用拷贝构造和赋值
    TaskManager(const TaskManager&) = delete;
    TaskManager& operator=(const TaskManager&) = delete;

    // // 初始化管理器
    // void Initialize();
    
    // 获取或创建执行器
    std::shared_ptr<TaskExecutor> GetExecutor(const std::string& name);
    std::shared_ptr<TaskExecutor> CreateExecutor(const std::string& name, 
                                                  uint32_t stack_size = 4096,
                                                  UBaseType_t priority = 2,
                                                  BaseType_t core_id = tskNO_AFFINITY);
private:
    TaskManager() = default;
    ~TaskManager() = default;

    mutable std::mutex executors_mutex_;// 执行器列表的互斥锁
    std::map<std::string, std::shared_ptr<TaskExecutor>> executors_;// 执行器列表

};
#endif // ESP_TASK_MANAGER_H
